home *** CD-ROM | disk | FTP | other *** search
/ Programming a Multiplayer FPS in DirectX / Programming a Multiplayer FPS in DirectX (Companion CD).iso / DirectX / dxsdk_oct2004.exe / dxsdk.exe / Utilities / Content Creation Tool Plug-Ins / Maya / Sources / viewer.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-09-27  |  5.0 KB  |  139 lines

  1. //--------------------------------------------------------------------------------------
  2. // File: Viewer.h
  3. //
  4. // Creates a window for viewing a standard semantics and annotations mesh 
  5. //
  6. // Copyright (c) Microsoft Corporation. All rights reserved
  7. //--------------------------------------------------------------------------------------
  8. #pragma once
  9. #ifndef VIEWER_H
  10. #define VIEWER_H
  11.  
  12.  
  13. struct CreateArgs
  14. {
  15.     D3DPRESENT_PARAMETERS PresentParams;
  16.     WCHAR strWindowTitle[MAX_PATH+1];
  17.     HINSTANCE hInstance;
  18.     HICON hIcon;
  19.     HMENU hMenu;
  20.     int width, height;
  21.     int x, y;
  22. };
  23.  
  24.  
  25. class CViewer : public CPipelineViewer, public CPipelineEngineEvents, public CPipelineManagerEvents, public CPipelineViewerEvents
  26. {
  27. public:
  28.     CViewer();
  29.     ~CViewer();
  30.  
  31.     HRESULT Create( CPipeline* pPreviewPipeline,    
  32.                     D3DPRESENT_PARAMETERS* pPresentationParameters,
  33.                     const WCHAR* strWindowTitle = L"Direct3D Preview Pipeline", 
  34.                     HINSTANCE hInstance = NULL, 
  35.                     HICON hIcon = NULL, 
  36.                     HMENU hMenu = NULL,
  37.                     int width = 640,
  38.                     int height = 480,
  39.                     int x = CW_USEDEFAULT, 
  40.                     int y = CW_USEDEFAULT );
  41.     HRESULT Destroy();
  42.  
  43.     HRESULT Refresh();
  44.  
  45.     void BindToWindow( HWND hWnd, BOOL bVisible=true );
  46.     void CheckForResize( BOOL bForceResize=false );
  47.     
  48.     void Hide();
  49.     void Show();
  50.  
  51.     UINT Run(){ return m_nPauseCount = 0; } //allow core logic to start/continue
  52.     UINT GetPauseCount(){ return m_nPauseCount; } //is the core logic running?
  53.     UINT Pause(){ return m_nPauseCount = 1; } //pause the core logic
  54.     
  55.     HWND    GetRenderWindow(){ return m_hWnd; } //get window this view will render to
  56.     HWND    GetShellWindow(){ return m_hWndShell; }
  57.     HRESULT    GetD3DSwapChain( IDirect3DSwapChain9** ppSwapChain );
  58.  
  59.     HRESULT RegisterEffectsInFrame( IDXCCFrame* pFrame );
  60.     HRESULT RegisterEffectsInMesh( IDXCCMesh* pMesh );
  61.  
  62.     void    DrawFrame( IDXCCFrame* pFrame );
  63.     void    DrawMesh( IDXCCMesh* pMesh );
  64.  
  65.     // CPipelineEngineEvents interface
  66.     HRESULT OnD3DDeviceCreate();
  67.     HRESULT OnD3DDeviceReset();
  68.     HRESULT OnD3DDeviceLost();
  69.     HRESULT OnD3DDeviceDestroy();
  70.  
  71.     // CPipelineManagerEvents interface
  72.     HRESULT OnReload(){ return Refresh(); };
  73.     HRESULT OnResourceAdd(IDXCCResource* pRes){ return Refresh(); };
  74.     HRESULT OnResourceRecycle(IDXCCResource* pRes){ return Refresh(); };
  75.     HRESULT OnResourceRemove(IDXCCResource* pRes){ return Refresh(); };
  76.  
  77.     // CPipelineViewerEvents interface
  78.     HRESULT OnFrameChildAdded(IDXCCFrame* pParent, IDXCCFrame* pChild) { return Refresh(); };
  79.     HRESULT OnFrameChildRemoved(IDXCCFrame* pParent, IDXCCFrame* pChild) { return Refresh(); };
  80.     HRESULT OnFrameMemberAdded(IDXCCFrame* pParent, IUnknown* pChild) { return Refresh(); };
  81.     HRESULT OnFrameMemberRemoved(IDXCCFrame* pParent, IUnknown* pChild) { return Refresh(); };
  82.     HRESULT OnMeshChange(IDXCCMesh* pMesh){ return Refresh(); };
  83.     HRESULT OnMeshDeclarationChange(IDXCCMesh* pMesh, IDXCCMesh* pOldMesh){ return Refresh(); };
  84.     HRESULT OnMeshTopologyChange(IDXCCMesh* pMesh, IDXCCMesh* pOldMesh){ return Refresh(); };
  85.     HRESULT OnMeshVertexChange(IDXCCMesh* pMesh, UINT vertMin, UINT vertMax){ return Refresh(); };
  86.     HRESULT OnMeshSubVertexChange(IDXCCMesh* pMesh, D3DDECLUSAGE Usage, UINT UsageIndex, UINT vertMin, UINT vertMax){ return Refresh(); };
  87.     HRESULT OnMeshAttributeChange(IDXCCMesh* pMesh, UINT faceMin, UINT faceMax){ return Refresh(); };
  88.     HRESULT OnMeshMaterialChange(IDXCCMesh* pMesh, DXCCATTRIBUTE Attrib, ID3DXEffect* pOldMaterial){ return Refresh(); };
  89.     HRESULT OnMaterialEffectChange(LPD3DXEFFECT pMaterial, LPD3DXEFFECT pOldEffect){ return Refresh(); };
  90.     HRESULT OnMaterialParameterChange(LPD3DXEFFECT pMaterial, D3DXHANDLE hParameter){ return Refresh(); };
  91.  
  92.     static CGrowableArray< CViewer* >& GetViewerList();
  93.     
  94. private:
  95.     void FrameMove();
  96.     void Render();
  97.  
  98.     static LRESULT CALLBACK StaticMsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  99.     LRESULT MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  100.  
  101.     static UINT __stdcall StaticRunThread( void* pParam );
  102.     UINT __stdcall RunThread();
  103.     
  104.     void RenderText();
  105.  
  106. private:
  107.     bool m_bDestroyCalled;
  108.     bool m_bCreated;
  109.     UINT m_nThreadID;
  110.     uintptr_t m_hThread;
  111.  
  112.     IDirect3DSurface9* m_pDepthStencil;
  113.     IDirect3DSwapChain9* m_pSwapChain;
  114.     CPipeline* m_pPreviewPipeline;
  115.  
  116.     float m_fTime;
  117.     float m_fPreviousTime;
  118.     float m_fElapsedTime;
  119.  
  120.     DWORD m_dwWidth;
  121.     DWORD m_dwHeight;
  122.  
  123.     int m_nPauseCount;
  124.     CreateArgs m_CreateArgs;
  125.     CDXUTDirectionWidget m_LightWidget;
  126.     CModelViewerCamera  m_Camera; 
  127.     ID3DXFont*          m_pFont;         // Font for drawing text
  128.     ID3DXSprite*        m_pTextSprite;   // Sprite for batching draw text calls
  129.     BOOL                m_bVisible;
  130.     HWND                m_hWnd;    
  131.     HWND                m_hWndBound;
  132.     HWND                m_hWndShell;
  133.  
  134.     CDXUTEffectMap      m_EffectMap;
  135.  
  136.     ID3DXEffect*        m_pDefaultEffect;
  137. };
  138.  
  139. #endif